const path = require('path');
const fs = require('fs-extra');

// 验证 uni-app 项目，由于可能会忽略 pages.json 文件，这里暂时调整为判定 manifest.json 文件。
function validateUniApp() {
  let result = '';
  if (fs.pathExistsSync('manifest.json')) {
    result = 'hx';
  } else if (fs.pathExistsSync('src/manifest.json')) {
    result = 'cli'
  }
  return result;
}
const isUniApp = validateUniApp();
// 是否通过 cli 创建的项目
function isCli() {
  return isUniApp === 'cli';
}
// 转换文件路径
function resolveFilePath() {
  return isCli() ? path.join('src', ...arguments) : path.join(...arguments);
}
// 创建符合规范的页面路径
function createRealPagePath(pagePath) {
  pagePath = pagePath.replace(/^\//, '');
  // 传入的路径可能省略了 pages 目录
  if (!pagePath.match(/^(pages|platforms)\//)) {
    pagePath = 'pages/' + pagePath;
  }
  return pagePath;
}
/**
 * 路由别名
 * - 移除 pages
 * - 中划线换成下划线
 * - 最后两级的名字一样或者是 index 的话就保留一个
 */
function createPageAlias(path) {
  path = path.toLowerCase().replace('pages/', '');

  let alias = '';
  const tokens = path.split('/');
  const lastIndex = tokens.length - 1;
  if (tokens[lastIndex] === 'index' || tokens[lastIndex] === tokens[lastIndex - 1]) {
    tokens.pop();
  }
  tokens.forEach(token => {
    token = token.replace(/\-/g, '_');
    alias += `_${token}`;
  });
  // 把开头的下划线去掉
  return alias.replace('_', '');
}

export {
  resolveFilePath,
  createRealPagePath,
  isUniApp,
  isCli,
  createPageAlias
}
